/**
 * Definition for singly-linked list.
 * */
function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val)
    this.next = (next === undefined ? null : next)
}

/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function (head, n) {
    let len = 0
    let currentNode = head
    while (currentNode) {
        currentNode = currentNode.next
        len++
    }
    // 重新将指针复位至头结点
    currentNode = head

    // 如果n刚好等于len，则直接返回头结点的下一个节点
    if (len === n) {
        return currentNode.next
    }

    // 移动指针至要删除节点的前一个节点
    let i = len - n - 1
    while (i > 0) {
        currentNode = currentNode.next
        i--
    }
    currentNode.next = currentNode.next.next
    return head
};

let inputNode = new ListNode(1, null)

// new ListNode(2, new ListNode(3, new ListNode(4, null)))
removeNthFromEnd(inputNode, 1)

//================v1要点总结===============
/**
 * 1. 本版本使用最容易想到的方式：一次遍历获得长度N，再次遍历 ,删除N - n - 1节点
 */